from pathlib import Path
from typing import List, Optional
from PIL import Image
from PIL import UnidentifiedImageError

def _get_webp_files(folder_path: str) -> List[Path]:
    """
    获取指定文件夹下所有 .webp 格式文件（按文件名排序）

    Args:
        folder_path: 文件夹路径（绝对路径或相对路径）

    Returns:
        排序后的 .webp 文件路径列表
    """
    folder = Path(folder_path)
    if not folder.exists() or not folder.is_dir():
        raise NotADirectoryError(f"文件夹不存在或不是目录：{folder_path}")

    # 按文件名自然排序，确保处理顺序一致
    webp_files = sorted(folder.glob("*.webp"), key=lambda x: x.name)
    if not webp_files:
        print(f"提示：文件夹 {folder_path} 中未找到 .webp 文件")
    return webp_files


def rename_webp_to_png_with_suffix(folder_path: str, suffix: str = "1") -> None:
    """
    仅重命名 .webp 文件为 .png（文件名后添加指定后缀，不转换文件内容）

    示例：one.webp → one{suffix}.png（默认 suffix 为 "1"）

    Args:
        folder_path: 存放 .webp 文件的文件夹路径
        suffix: 要添加的固定后缀（默认值："1"）
    """
    webp_files = _get_webp_files(folder_path)

    for webp_file in webp_files:
        # 构建新文件名：原文件名 + 后缀 + .png
        new_filename = f"{webp_file.stem}{suffix}.png"
        new_filepath = webp_file.with_name(new_filename)

        # 处理文件已存在的情况
        if new_filepath.exists():
            print(f"警告：{new_filename} 已存在，跳过重命名")
            continue

        # 执行重命名
        try:
            webp_file.rename(new_filepath)
            print(f"重命名成功：{webp_file.name} → {new_filename}")
        except PermissionError:
            print(f"错误：无权限操作文件 {webp_file.name}，请关闭占用程序")
        except Exception as e:
            print(f"处理 {webp_file.name} 失败：{str(e)}")


def convert_webp_to_png_with_suffix(
        folder_path: str,
        suffix: str = "1",
        delete_original: bool = False
) -> None:
    """
    将 .webp 图片转换为 PNG 格式（文件名后添加指定后缀，实际转换文件内容）

    示例：one.webp → one{suffix}.png（默认 suffix 为 "1"）

    Args:
        folder_path: 存放 .webp 文件的文件夹路径
        suffix: 要添加的固定后缀（默认值："1"）
        delete_original: 转换后是否删除原 .webp 文件（默认：False）
    """
    webp_files = _get_webp_files(folder_path)

    for webp_file in webp_files:
        # 构建新文件名
        new_filename = f"{webp_file.stem}{suffix}.png"
        new_filepath = webp_file.with_name(new_filename)

        # 处理文件已存在的情况
        if new_filepath.exists():
            print(f"警告：{new_filename} 已存在，跳过转换")
            continue

        # 执行格式转换
        try:
            with Image.open(webp_file) as img:
                # 确保以 PNG 格式保存（处理透明通道等细节）
                img.save(new_filepath, format="PNG")
            print(f"转换成功：{webp_file.name} → {new_filename}")

            # 可选：删除原文件
            if delete_original:
                webp_file.unlink()
                print(f"已删除原文件：{webp_file.name}")

        except UnidentifiedImageError:
            print(f"错误：{webp_file.name} 不是有效的 WebP 图片，跳过")
        except PermissionError:
            print(f"错误：无权限操作文件 {webp_file.name}，请关闭占用程序")
        except Exception as e:
            print(f"转换 {webp_file.name} 失败：{str(e)}")


# 示例用法（可根据需求注释/修改）
if __name__ == "__main__":
    # 目标文件夹路径（替换为实际路径）
    target_folder = "../add_text/pomeranian_colors"

    # 选择1：仅重命名（不转换格式）
    # rename_webp_to_png_with_suffix(folder_path=target_folder, suffix="1")

    # 选择2：实际转换为PNG（推荐），可添加delete_original=True删除原文件
    convert_webp_to_png_with_suffix(folder_path=target_folder, suffix="1")